package wenjun.du.androidart.viewcreate

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_view_create.*
import wenjun.du.androidart.R

/**
 * view的创建过程，包括view的测量 布局和绘制过程
 *
 * 重点：view的创建流程与activity的流程时机：在activity的onResume之后，开启了view的绘制
 * ActivityThread.handleResumeActivity方法 调用activity的onResume方法 并且开启绘制view的流程
 *
 * 源码分析：
 *
 * measure:
 * 关键流程：
 *  measureSpec创建过程：通过父控件的measureSpace和子控件的layoutParams结合生产子控件的measureSpace测量
 * 1.如果是子view,measure的流程就是测量自己，并且设值measureWidth和measureHeight
 * 2.如果是viewGroup 除了需要测量自己以外，还需要分发的测量子view,其中关键方法 getChildMeasureSpec
 *
 * layout:
 * 关键方法：
 * layout:确定自己在父控件中的位置
 * onLayout：如果是父控件，遍历测量子控件的位置，如果是子控件，则没有太大意义
 *
 * draw:
 * 明确不会绘制时 调用setWillNotDraw 方法 优化性能
 * 源码中分为六步：
 * 1.绘制背景
 * 2.绘制阴影准备
 * 3.绘制内容
 * 4.绘制子控件 （如果是在viewGroup中 重写了该方法，遍历绘制子控件）
 * 5.绘制阴影
 * 6.绘制滑动栏
 * */
class ViewCreateActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_view_create)
        getViewWH.setOnClickListener {
            val intent = Intent(this, ViewSizeActivity::class.java)
            startActivity(intent)
        }
        viewBySelf.setOnClickListener {
            val intent = Intent(this, ViewBySelfActivity::class.java)
            startActivity(intent)
        }
    }
}